home *** CD-ROM | disk | FTP | other *** search
/ Precision Software Appli…tions Silver Collection 1 / Precision Software Applications Silver Collection Volume One (PSM) (1993).iso / windows / games / wmfread.arj / CMNDLG.C < prev    next >
C/C++ Source or Header  |  1992-11-17  |  9KB  |  325 lines

  1. /***********************************************************************
  2.  
  3.   MODULE     : CMNDLG.C
  4.  
  5.   FUNCTIONS  :
  6.  
  7.   COMMENTS   :
  8.  
  9. ************************************************************************/
  10. // COPYRIGHT:
  11. //
  12. //   (C) Copyright Microsoft Corp. 1992.  All rights reserved.
  13. //
  14. //   You have a royalty-free right to use, modify, reproduce and
  15. //   distribute the Sample Files (and/or any modified version) in
  16. //   any way you find useful, provided that you agree that
  17. //   Microsoft has no warranty obligations or liability for any
  18. //   Sample Application Files which are modified.
  19. #include "windows.h"
  20. #include "wmfdcode.h"
  21.  
  22. /**************************************************************************
  23.  
  24.   Function:  InitializeStruct(WORD, LPSTR)
  25.  
  26.    Purpose:  To initialize a structure for the current common dialog.
  27.          This routine is called just before the common dialogs
  28.          API is called.
  29.  
  30.    Returns:  void
  31.  
  32.   Comments:
  33.  
  34.    History:  Date      Author       Reason
  35.          --------  ---------   -----------------------------------
  36.  
  37.           10/01/91    gregk        Created
  38.           11/25/91    denniscr    mod for purposes of this app
  39.  
  40. **************************************************************************/
  41.  
  42.  
  43. void InitializeStruct (wCommDlgType, lpStruct)
  44. WORD wCommDlgType;
  45. LPSTR lpStruct;
  46. {
  47.    LPFOCHUNK lpFOChunk;
  48.    LPFSCHUNK lpFSChunk;
  49.  
  50.    switch (wCommDlgType)
  51.       {
  52.    case FILEOPENDLG:
  53.       lpFOChunk = (LPFOCHUNK)lpStruct;
  54.       *(lpFOChunk->szFile) = 0;
  55.       *(lpFOChunk->szFileTitle) = 0;
  56.       lpFOChunk->of.lStructSize = sizeof(OPENFILENAME);
  57.       lpFOChunk->of.hwndOwner = (HWND)hWndMain;
  58.       lpFOChunk->of.hInstance = (HANDLE)NULL;
  59.       lpFOChunk->of.lpstrFilter = gszFilter;
  60.       lpFOChunk->of.lpstrCustomFilter = (LPSTR)NULL;
  61.       lpFOChunk->of.nMaxCustFilter = 0L;
  62.       lpFOChunk->of.nFilterIndex = 1L;
  63.       lpFOChunk->of.lpstrFile = lpFOChunk->szFile;
  64.       lpFOChunk->of.nMaxFile = (DWORD)sizeof(lpFOChunk->szFile);
  65.       lpFOChunk->of.lpstrFileTitle = lpFOChunk->szFileTitle;
  66.       lpFOChunk->of.nMaxFileTitle = 256;
  67.       lpFOChunk->of.lpstrInitialDir = (LPSTR)NULL;
  68.       lpFOChunk->of.lpstrTitle = (LPSTR)NULL;
  69.       lpFOChunk->of.Flags = OFN_HIDEREADONLY | OFN_PATHMUSTEXIST |
  70.                             OFN_FILEMUSTEXIST;
  71.       lpFOChunk->of.nFileOffset = 0;
  72.       lpFOChunk->of.nFileExtension = 0;
  73.       lpFOChunk->of.lpstrDefExt = (LPSTR)NULL;
  74.       lpFOChunk->of.lCustData = 0L;
  75.       lpFOChunk->of.lpfnHook = (FARHOOK)NULL;
  76.       lpFOChunk->of.lpTemplateName = (LPSTR)NULL;
  77.       break;
  78.  
  79.    case FILESAVEDLG:
  80.       lpFSChunk = (LPFSCHUNK)lpStruct;
  81.       *(lpFSChunk->szFile) = 0;
  82.       *(lpFSChunk->szFileTitle) = 0;
  83.       lpFSChunk->of.lStructSize = sizeof(OPENFILENAME);
  84.       lpFSChunk->of.hwndOwner = (HWND)hWndMain;
  85.       lpFSChunk->of.hInstance = (HANDLE)NULL;
  86.       lpFSChunk->of.lpstrFilter = (LPSTR)"Windows Metafile\0DEFAULT.WMF\0";
  87.       lpFSChunk->of.lpstrCustomFilter = (LPSTR)NULL;
  88.       lpFSChunk->of.nMaxCustFilter = 0L;
  89.       lpFSChunk->of.nFilterIndex = 1L;
  90.       lpFSChunk->of.lpstrFile = lpFSChunk->szFile;
  91.       lpFSChunk->of.nMaxFile = (DWORD)sizeof(lpFSChunk->szFile);
  92.       lpFSChunk->of.lpstrFileTitle = lpFSChunk->szFileTitle;
  93.       lpFSChunk->of.nMaxFileTitle = 256;
  94.       lpFSChunk->of.lpstrInitialDir = (LPSTR)NULL;
  95.       lpFSChunk->of.lpstrTitle = (LPSTR)NULL;
  96.       lpFSChunk->of.Flags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT;
  97.       lpFSChunk->of.nFileOffset = 0;
  98.       lpFSChunk->of.nFileExtension = 0;
  99.       lpFSChunk->of.lpstrDefExt = (LPSTR)"WMF";
  100.       lpFSChunk->of.lCustData = 0L;
  101.       lpFSChunk->of.lpfnHook = (FARHOOK)NULL;
  102.       lpFSChunk->of.lpTemplateName = (LPSTR)NULL;
  103.       break;
  104.  
  105.    default:
  106.       break;
  107.       }
  108.    return;
  109. }
  110.  
  111. /***********************************************************************
  112.  
  113.   FUNCTION   : SplitPath
  114.  
  115.   PARAMETERS : LPSTR lpszFileName
  116.            LPSTR lpszDrive
  117.            LPSTR lpszDir
  118.            LPSTR lpszFname
  119.            LPSTR lpszExt
  120.  
  121.   PURPOSE    : split the fully qualified path into its components
  122.  
  123.   CALLS      : WINDOWS
  124.          none
  125.  
  126.                APP
  127.          none
  128.  
  129.   MESSAGES   : none
  130.  
  131.   RETURNS    : void
  132.  
  133.   COMMENTS   :
  134.  
  135.   HISTORY    : 1/16/91 - created - drc
  136.  
  137. ************************************************************************/
  138.  
  139.  
  140. void SplitPath (lpszFileName, lpszDrive, lpszDir, lpszFname, lpszExt)
  141. LPSTR lpszFileName;
  142. LPSTR lpszDrive;
  143. LPSTR lpszDir;
  144. LPSTR lpszFname;
  145. LPSTR lpszExt;
  146. {
  147.    char szPath[MAXFILTERLEN];
  148.    LPSTR lpszPath;
  149.    LPSTR lpszTemp;
  150.    int nFileNameLen = nExtOffset - (nFileOffset + 1);
  151.    int i;
  152.  
  153.    /* init ptrs */
  154.  
  155.    lpszPath = szPath;
  156.    lpszTemp = lpszFileName;
  157.  
  158.    /* pick off the path */
  159.    for (i = 0; i < nFileOffset; i++, lpszTemp++, lpszPath++)
  160.       *lpszPath = *lpszTemp;
  161.    *lpszPath = '\0';
  162.    lpszPath = szPath;
  163.  
  164.    /* pick off the drive designator */
  165.    for (i = 0; i < 2; i++, lpszPath++, lpszDrive++)
  166.       *lpszDrive = *lpszPath;
  167.    *lpszDrive = '\0';
  168.  
  169.    /* pick off the directory */
  170.    while (*lpszPath != '\0')
  171.       *lpszDir++ = *lpszPath++;
  172.    *lpszDir = '\0';
  173.  
  174.    /* reset temp ptr */
  175.    lpszTemp = lpszFileName;
  176.  
  177.    /* index to filename */
  178.    lpszTemp += nFileOffset;
  179.  
  180.    /* pick off the filename */
  181.    for (i = 0; i < nFileNameLen; i++, lpszTemp++, lpszFname++)
  182.       *lpszFname = *lpszTemp;
  183.    *lpszFname = '\0';
  184.  
  185.    /* reset temp ptr */
  186.    lpszTemp = lpszFileName;
  187.  
  188.    /* index to file extension */
  189.    lpszTemp += nExtOffset;
  190.  
  191.    /* pick off the ext */
  192.    while (*lpszTemp != '\0')
  193.       *lpszExt++ = *lpszTemp++;
  194.    *lpszExt = '\0';
  195. }
  196.  
  197. /***********************************************************************
  198.  
  199.   FUNCTION   : OpenFileDialog
  200.  
  201.   PARAMETERS : LPSTR lpszOpenName
  202.  
  203.   PURPOSE    : init the OPENFILE structure and call the file open
  204.            common dialog
  205.  
  206.   CALLS      : WINDOWS
  207.          GlobalAlloc
  208.          GlobalLock
  209.          GlobalFree
  210.          wsprintf
  211.          GetOpenFileName
  212.  
  213.                APP
  214.          InitializeStruct
  215.  
  216.   MESSAGES   : none
  217.  
  218.   RETURNS    : int (see returns for GetOpenFileName)
  219.  
  220.   COMMENTS   :
  221.  
  222.   HISTORY    : 11/25/91 - created - drc
  223.  
  224. ************************************************************************/
  225.  
  226.  
  227. int OpenFileDialog (lpszOpenName)
  228. LPSTR lpszOpenName;
  229. {
  230.    int nRet;
  231.    HANDLE hChunk;
  232.    LPFOCHUNK lpFOChunk;
  233.  
  234.    hChunk = GlobalAlloc(GMEM_FIXED, sizeof(FOCHUNK));
  235.    if (hChunk)
  236.    {
  237.       lpFOChunk = (LPFOCHUNK)GlobalLock(hChunk);
  238.       if (!lpFOChunk)
  239.       {
  240.          GlobalFree(hChunk);
  241.          lpFOChunk = NULL;
  242.          return (0);
  243.       }
  244.    }
  245.    else
  246.    {
  247.       lpFOChunk = NULL;
  248.       return (0);
  249.    }
  250.    InitializeStruct(FILEOPENDLG, (LPSTR)lpFOChunk);
  251.    nRet = GetOpenFileName(&(lpFOChunk->of));
  252.    if (nRet)
  253.    {
  254.       wsprintf(lpszOpenName, (LPSTR)"%s", lpFOChunk->of.lpstrFile);
  255.       nExtOffset = lpFOChunk->of.nFileExtension;
  256.       nFileOffset = lpFOChunk->of.nFileOffset;
  257.    }
  258.    GlobalUnlock(hChunk);
  259.    GlobalFree(hChunk);
  260.    return (nRet);
  261. }
  262.  
  263. /***********************************************************************
  264.  
  265.   FUNCTION   : SaveFileDialog
  266.  
  267.   PARAMETERS : LPSTR lpszOpenName
  268.  
  269.   PURPOSE    : init the OPENFILE structure and call the file open
  270.            common dialog
  271.  
  272.   CALLS      : WINDOWS
  273.          GlobalAlloc
  274.          GlobalLock
  275.          GlobalFree
  276.          wsprintf
  277.          GetOpenFileName
  278.  
  279.                APP
  280.          InitializeStruct
  281.  
  282.   MESSAGES   : none
  283.  
  284.   RETURNS    : int (see returns for GetSaveFileName)
  285.  
  286.   COMMENTS   : this could easily be merged with OpenFileDialog.  This
  287.            would decrease the redundancy but this is more illustrative.
  288.  
  289.   HISTORY    : 11/25/91 - created - drc
  290.  
  291. ************************************************************************/
  292.  
  293.  
  294. int SaveFileDialog (lpszSaveName)
  295. LPSTR lpszSaveName;
  296. {
  297.    int nRet;
  298.    HANDLE hChunk;
  299.    LPFOCHUNK lpFOChunk;
  300.  
  301.    hChunk = GlobalAlloc(GMEM_FIXED, sizeof(FOCHUNK));
  302.    if (hChunk)
  303.    {
  304.       lpFOChunk = (LPFOCHUNK)GlobalLock(hChunk);
  305.       if (!lpFOChunk)
  306.       {
  307.          GlobalFree(hChunk);
  308.          lpFOChunk = NULL;
  309.          return (0);
  310.       }
  311.    }
  312.    else
  313.    {
  314.       lpFOChunk = NULL;
  315.       return (0);
  316.    }
  317.    InitializeStruct(FILESAVEDLG, (LPSTR)lpFOChunk);
  318.    nRet = GetSaveFileName(&(lpFOChunk->of));
  319.    if (nRet)
  320.       wsprintf(lpszSaveName, (LPSTR)"%s", lpFOChunk->of.lpstrFile);
  321.    GlobalUnlock(hChunk);
  322.    GlobalFree(hChunk);
  323.    return (nRet);
  324. }
  325.